/*
 * 标题:          农务数据库检索系统
 * 
 * 描述:  		  以mysql为数据库，远程连接数据库进行水稻、 小麦、昆虫等数据库的检索
 * 
 * 备注:			 demo开头的html、jsp和java文件均为测试用例，无实际效用
 *
 * Copyright (c) 2017, Nanjing Agricultural University, China
 */

package cn.edu.njau.ads.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import cn.edu.njau.ads.model.Rice;
import cn.edu.njau.ads.util.AppException;
import cn.edu.njau.ads.util.DBUtil;

/**
 * 水稻数据访问类
 * 
 * @author zzy
 *
 */
public class RiceDB {
	
	/**
	 * 根据部分检索条件查询水稻结果
	 * 
	 * @param unify_id		统一编号
	 * @param name_cn	           中文名
	 * @param place		           原产地
	 * @param family		科
	 * @param genus			属
	 * @param species		种
	 * @return				水稻对象数组
	 * @throws AppException
	 */
	public Rice[] getRices(String unify_id,String name_cn,String place,String family,String genus,String species) throws AppException{
		Rice[] rices = null;
		// 声明数据库连接对象、预编译对象和结果集对象
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		try {
			// 创建数据库连接
			conn = DBUtil.getConnection("cgris");
			// 声明操作语句,"?"为占位符
			
			// System.out.println(name_cn+name_latin+_class+order+family);
			
			String sql = "select * from cgris_rice where 统一编号 Like ?"
					+ " and 品种名称 Like ?"
					+ " and 原产地 Like ?"
					+ " and 科名 Like ?"
					+ " and 属名 like ?"
					+ " and 学名 like ?";
			// 预编译sql
			psmt = conn.prepareStatement(sql);
			// 为占位符设置值
			psmt.setString(1, "%"+unify_id+"%");
			psmt.setString(2, "%"+name_cn+"%");
			psmt.setString(3, "%"+place+"%");
			psmt.setString(4, "%"+family+"%");
			psmt.setString(5, "%"+genus+"%");
			psmt.setString(6, "%"+species+"%");
			// 执行此查询操作
			
			// System.out.println(sql);
			
			rs = psmt.executeQuery();
			
			// 移到最后一行
			rs.last(); 
			// 得到当前行号，也就是记录数
			int n = rs.getRow();
			// 移动回第一行前
			rs.beforeFirst();
			
			// System.out.println(rs.getRow());
			// System.out.println(n);
			
			if (n > 0) {
				rices = new Rice[n];
				for (int i = 0; i < n; i++) {
					// System.out.println(i);
			 		rs.next();
			 		// System.out.println(rs.getRow());
			 		// System.out.println(rs.getInt("id"));
			 		Rice rice = new Rice();
					rice.setId(rs.getInt("id"));
					rice.setUnify_id(rs.getString("统一编号"));
					rice.setName_cn(rs.getString("品种名称"));
					rice.setSpecies(rs.getString("学名"));
					rice.setPlace(rs.getString("原产地"));
					rice.setCompany(rs.getString("保存单位"));
					rices[i] = rice;
				}
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
			throw new AppException("cn.edu.njau.zzy.db.RiceDB.getRices");
		} catch (Exception e) {
			e.printStackTrace();
			throw new AppException("cn.edu.njau.zzy.db.RiceDB.getRices");
		} finally {
			// 关闭数据库查询结果集
			DBUtil.closeResultSet(rs);

			// 关闭数据库查询指令
			DBUtil.closeStatement(psmt);

			// 关闭数据库连接
			DBUtil.closeConnection(conn);
		}
		return rices;
	}
}

